package com.rockcent.service;

import com.rockcent.mall.lib.domain.Merchant;
import com.rockcent.mall.lib.domain.MerchantGiftPacketProduct;
import com.rockcent.mall.lib.domain.Product;
import com.rockcent.mall.lib.domain.enumclass.GiftPacketStatus;
import com.rockcent.mall.lib.domain.enumclass.ProductMerchantStoreType;
import com.rockcent.mall.lib.domain.enumclass.ProductStatus;
import com.rockcent.mall.lib.dto.ProductDto;

import java.util.List;

/**
 * 产品管理接口
 * Created by zhangjh on 2016/11/23.
 */
public interface MerchantProductSrv {

    /**
     *
     * @param productId
     * @param status
     */
    void updateProductStatus(Long productId, ProductStatus status);

    /**
     *
     * @param status
     * @param productIds
     */
    void updateProductStatus(ProductStatus status,List<Long> productIds);

    /**
     *
     * @param productId
     * @param manual
     * @param introduce
     */
    void saveProductDetail(Long productId, String manual, String introduce);

    /**
     *
     * @param productDto
     * @param merchantId
     */
    void saveProductMerchantStores(ProductDto productDto, Long merchantId);

    /**
     *
     * @param productDto
     */
    void saveProductCategories(ProductDto productDto);

    /**
     *
     * @param type
     * @param productId
     * @param merchantId
     * @return
     */
    String getProductStoreNames(ProductMerchantStoreType type, Long productId, Long merchantId);

    /**
     *
     * @param product
     * @param productList
     */
    void updateMarketProductInfo(Product product, List<Product> productList);

    /**
     *
     * @param merchant
     */
    void updateMerchantProductInfo(Merchant merchant);

    /**
     *
     * @param productList
     * @param status
     * @param recommend
     */
    void updateMarketProductStatus(List<Product> productList, ProductStatus status, boolean recommend);

    /**
     *
     * @param product
     */
    void auditProduct(Product product);

    /**
     *
     * @param product
     */
    void productStatisticsSave(Product product);

    /**
     *
     * @param productList
     * @param status
     */
    void updateProductStatus(List<Product> productList, ProductStatus status);

    /**
     *
     * @param categoriesId
     * @return
     */
    StringBuilder parentName(Long categoriesId);

    /**
     *
     * @return
     */
    List<Long> findAllSoldoutProductIds();

    /**
     *
     * @param productId
     * @param status
     */
    void updateGiftPacketStatus(Long productId, GiftPacketStatus status);

    /**
     * 向分销商发送产品上架或下架消息
     * @param productIds
     * @param status
     */
    void sendProductMsgToDistributorMerchant(List<Long> productIds, ProductStatus status);
}
